package com.namecard.namecardapi.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.namecard.namecardapi.entity.DTO.OrderDTO;
import com.namecard.namecardapi.entity.OrderInfo;
import com.namecard.namecardapi.entity.vo.*;
import javax.servlet.http.HttpServletRequest;
import java.util.List;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author wzx
 * @since 2023-07-03
 */
public interface OrderInfoService extends IService<OrderInfo> {

    /**
     * 展示未支付订单列表
     * @param userId 用户id
     */
    List<OrderListFinalVO> getNoPayOrderList(String userId);

    /**
     * 展示已支付订单列表
     * @param userId 用户id
     */
    List<OrderCardInfoVO> getPayOrderList(String userId);

    /**
     * 支付订单
     */
    void payOrderList(String cardIds, String userId, HttpServletRequest request);

    /**
     * 购物车订单
     *
     * @param shopUserId 卡片用户id
     * @param shopId     卡片id
     * @return boolean
     */
    boolean saveOrderCardCar(String shopUserId, String shopId, String userId);



    /**
     * 删除名片订单
     *
     * @param orderId 订单id
     * @param userId  用户id
     * @return boolean
     */
    boolean deleteOrder(Long orderId,String userId);


    /**
     * 失效的订单
     *
     * @param orderId 订单id
     * @return boolean
     */
    boolean invalidOrder(String orderId);

    /**
     * 特殊数据确定下单接口
     */
    boolean specialDataPay(String userId, Integer count, String sendEmail, HttpServletRequest request);

    /**
     * 特殊数据购买订单列表
     */
    List<SpecialOrderVO> getSpecialOrderList(String userId);

    boolean deleteSpecialOrder(String userId, Long orderId);

    /**
     * 请求支付授权，创建order。返回orderId
     *
     * @param userId
     * @param paymentVO
     * @return
     */
    String approve(String userId,PaymentVO paymentVO);


    /**
     * 前端支付完成,余额支付直接调用此方法
     * @param completeVO
     * @return
     */
    ResponseVO complete(CompleteVO completeVO );


    /**
     * 取消支付,订单关闭
     * @param orderId
     * @return
     */
    Boolean cancelled(String orderId );

    /**
     * 生成未支付订单
     * @param userId
     * @param orderDTO
     * @return
     */
    String createOrder(String userId, OrderDTO orderDTO);

    /**
     * 获取已支付订单详情列表
     * @param userId
     * @return
     */
    OrderDetailsVO getPayOrderDetailsList(String userId, String orderId);
}
